package com.kkb.kkbportal.service.impl;


import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.kkb.kkbcommon.exception.Asserts;
import com.kkb.kkbportal.dao.PermissionMapper;
import com.kkb.kkbportal.domain.ums.Permission;
import com.kkb.kkbportal.service.PermissionService;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 * 权限详情表 服务实现类
 * </p>
 *
 * @author lzs
 * @since 2021-08-14
 */
@Service
public class PermissionServiceImpl extends ServiceImpl<PermissionMapper, Permission> implements PermissionService {

    /**
     * 根据条件分页展示信息
     *
     * @param conditionalPermission 封装了查询条件的权限信息
     * @param pageNum               页码
     * @param pageSize              条数
     * @return 查询结果
     */
    @Override
    public PageInfo<Permission> selectPage(Permission conditionalPermission, Integer pageNum, Integer pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        return new PageInfo<>(this.selectByCondition(conditionalPermission));
    }

    /**
     * 通过指定条件查询角色信息
     *
     * @param conditionalPermission 封装了对应条件的权限信息
     * @return 权限列表
     */
    @Override
    public List<Permission> selectByCondition(Permission conditionalPermission) {
        return this.lambdaQuery()
                .like(StrUtil.isNotBlank(conditionalPermission.getName()), Permission::getName, conditionalPermission.getName())
                .like(StrUtil.isNotBlank(conditionalPermission.getPermissionDescription()), Permission::getPermissionDescription, conditionalPermission.getPermissionDescription()).list();
    }

    /**
     * 根据权限id查询权限信息
     *
     * @param id 权限id
     * @return 权限信息
     */
    @Override
    public Permission selectPermissionById(Long id) {
        Permission permission = this.getById(id);
        if (ObjectUtil.isNull(permission)) {
            Asserts.fail("查无此角色");
        }
        return permission;
    }

    /**
     * 新增权限
     *
     * @param permission 权限对象
     */
    @Override
    public void insert(Permission permission) {
        Permission permissionExist = selectByPermissionName(permission.getName());
        if (ObjectUtil.isNull(permissionExist)) {
            if (!this.save(permission)) {
                Asserts.fail("新增失败");
            }
        }
        Asserts.fail("权限名称重复");
    }

    /**
     * 通过权限名称来获取对应权限对象，在新增对象中使用
     *
     * @param permissionName 权限名称
     * @return 权限对象
     */
    @Override
    public Permission selectByPermissionName(String permissionName) {
        Permission permission = new Permission();
        permission.setName(permissionName);
        List<Permission> permissions = selectByCondition(permission);
        for (Permission permissionn : permissions) {
            if (permissionn.getName().equals(permissionName)) {
                return permission;
            }
        }
        return null;
    }

    /**
     * 根据传入的id对权限进行逻辑删除
     *
     * @param id id值
     */
    @Override
    public void deleteById(Long id) {
        Permission permission = new Permission();
        permission.setId(id);
        permission.setIsDeleted(1);
        this.updateById(permission);
    }
}
